var Local=function(socket){
	//游戏对象
	var game;

	var INTERVAL=500; //500毫秒
	//定时器
	var timer=null;

	//时间计数器
	var timeCount=0; //每隔500毫秒加一

	//时间（秒）
	var time=0; //timeCount=2次，则time=1秒


	//绑定键盘事件
	var bindKeyEvent=function(){
		document.onkeydown=function(e){
			if (e.keyCode==38) { //上键
				game.rotate();
				socket.emit('rotate');
			}else if (e.keyCode==39) { //右键
				game.right();
				socket.emit('right');
			}else if (e.keyCode==40) { //下键
				game.down();
				socket.emit('down');
			}else if (e.keyCode==37) { //左键
				game.left();
				socket.emit('left');
			}else if (e.keyCode==32) { //空格键
				game.fall();
				socket.emit('fall');
			}
		}
	}

	//移动、到底部时执行固定方法fixed()、
	//到底部后下一个方块消除、判断是否结束并结束、出现
	var move=function(){
		timeFunc(); //计时函数
		if(!game.down()){  //这种写法在判断的同时也执行了移动函数

			game.fixed();  //固定
			socket.emit('fixed');

			//消除
			var line=game.checkClear();
			if(line){
				socket.emit('line', line);
				game.addScore(line);
				if (line>1) {
					var bottomLines=generateBottomLine(line);
					socket.emit('bottomLines', bottomLines);
				}
			} 

			//游戏结束:
			var gameOver=game.checkGameOver();
			if(gameOver){
				game.gameover(false); //游戏结束后在界面中显示游戏结果的函数
				document.getElementById('remote_gameover').innerHTML='你赢了';
				socket.emit('gameover');
				stop();
			}else{
				var t=generateType();
				var d=generateDir();
				game.performNext(t, d);
				socket.emit('next', {type: t, dir: d});
				//生成方块,参数分别是方块类型和转化得dir
			}
		}else{
			socket.emit('down');
		}
	}

	//随机生成干扰行
	var generateBottomLine=function(lineNum){
		var lines=[];
		for(var i=0;i<lineNum;i++){
			var line=[];
			for (var j = 0; j < 10; j++) {
				line.push(Math.ceil(Math.random()*2)-1);
			}
			lines.push(line);
		}
		return lines;
	}

	//计时函数
	var timeFunc=function(){
		timeCount=timeCount+1;
		if(timeCount==2){
			timeCount=0;
			time=time+1;
			game.setTime(time); //在game中让时间数据反映到界面上
			socket.emit('setTime', time);
		}
	}

	//随机生成方块种类
	var generateType=function(){
		return Math.ceil(Math.random()*7)-1;
	}
	//随机生成方块dir
	var generateDir=function(){
		return Math.ceil(Math.random()*4)-1;
	}

	//开始
	var start=function(){
		var doms={
			gameDiv:document.getElementById('local_game'),
			nextDiv:document.getElementById('local_next'),
			timeDiv:document.getElementById('local_time'),
			scoreDiv:document.getElementById('local_score'),
			resultDiv:document.getElementById('local_gameover')
		}
		game=new Game();
		var type=generateType();
		var dir=generateDir();
		game.init(doms, type, dir); //初始化第一个方块
		socket.emit('init', {type: type, dir: dir}); //发送第一个方块数据给服务器
		bindKeyEvent();
		var t=generateType();
		var d=generateDir();
		game.performNext(t, d); //随机生成下一个方块
		socket.emit('next', {type: t, dir: d}); //发送下一个方块数据给服务器
		//初始化gameDivs中第一个方块

		timer=setInterval(move, INTERVAL);
		//定时器:每INTERVAL毫秒执行move函数一次
	}
	//结束
	var stop=function(){
		//关闭定时器
		if(timer){
			clearInterval(timer);
			timer=null;
		}
		//游戏结束不能继续操作了，要清除键盘绑定事件
		document.onkeydown=null;
	}


	// webSocket 交互：
	socket.on('start', function(){
		document.getElementById('waitting').innerHTML='';
		start();
	});
	socket.on('gameover', function(){
		game.gameover(true);
		stop();
	});
	socket.on('leave', function(){
		document.getElementById('local_gameover').innerHTML='对方掉线了';
		document.getElementById('remote_gameover').innerHTML='已掉线';
		stop();
	});
	socket.on('bottomLines', function(data){
		game.addTailLines(data);
		socket.emit('addTailLines', data);
	});


	//导出API
	this.start=start;

}